package us.proyecto.canarios.domain;

import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.validator.Email;

/**
 * Clase que mapea la tabla JUEZ
 *
 * @author Juan Antonio Mena Sánchez
 *
 */
@Entity
@Table(name = "JUEZ")
public class Juez {

	private int idJuez;
	private String nombre;
	private String apellido1;
	private String apellido2;
	private String dni;
	private String domicilio;
	private Provincia provincia;
	private Municipio municipio;
	private String codigoPostal;
	private String telefono;
	private String email;
	private String numJuez;
	private Usuario usuario;
	private Set<JuezConcurso> juecesConcurso;

	/**
	 * Getter de idCriador
	 * @return idCriador int
	 */
	@Id
    @SequenceGenerator(name = "juezId", sequenceName = "CAN_JUEZ_SEQ", initialValue = 1, allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "juezId")
    @Column(name = "ID_JUEZ", nullable = false, precision = 8, scale = 0)
	public int getIdJuez() {
		return idJuez;
	}

	/**
	 * Setter de idCriador
	 * @param idCriador int
	 */
	public void setIdJuez(int idCriador) {
		this.idJuez = idCriador;
	}

	/**
	 * Getter de nombre
	 * @return nombre String
	 */
	@Column(name="NOMBRE")
	public String getNombre() {
		return nombre;
	}

	/**
	 * Setter de nombre
	 * @param nombre String
	 */
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	/**
	 * Getter de apellido1
	 * @return apellido1 String
	 */
	@Column(name="APELLIDO_1")
	public String getApellido1() {
		return apellido1;
	}

	/**
	 * Setter de apellido1
	 * @param apellido1 String
	 */
	public void setApellido1(String apellido1) {
		this.apellido1 = apellido1;
	}

	/**
	 * Getter de apellido2
	 * @return apellido2 String
	 */
	@Column(name="APELLIDO_2")
	public String getApellido2() {
		return apellido2;
	}

	/**
	 * Setter de apellido2
	 * @param apellido2 String
	 */
	public void setApellido2(String apellido2) {
		this.apellido2 = apellido2;
	}

	/**
	 * Getter de domicilio
	 * @return domicilio String
	 */
	@Column(name="DOMICILIO")
	public String getDomicilio() {
		return domicilio;
	}

	/**
	 * Setter de domicilio
	 * @param domicilio String
	 */
	public void setDomicilio(String domicilio) {
		this.domicilio = domicilio;
	}

	/**
	 * Getter de provincia
	 * @return provincia Provincia
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="PROVINCIA")
	public Provincia getProvincia() {
		return provincia;
	}

	/**
	 * Setter de provincia
	 * @param provincia Provincia
	 */
	public void setProvincia(Provincia provincia) {
		this.provincia = provincia;
	}

	/**
	 * Getter de municipio
	 * @return municipio Municipio
	 */
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name="MUNICIPIO")
	public Municipio getMunicipio() {
		return municipio;
	}

	/**
	 * Setter de municipio
	 * @param municipio Municipio
	 */
	public void setMunicipio(Municipio municipio) {
		this.municipio = municipio;
	}

	/**
	 * Getter de codigoPostal
	 * @return codigoPostal String
	 */
	@Column(name="CODIGO_POSTAL")
	public String getCodigoPostal() {
		return codigoPostal;
	}

	/**
	 * Setter de codigoPostal
	 * @param codigoPostal String
	 */
	public void setCodigoPostal(String codigoPostal) {
		this.codigoPostal = codigoPostal;
	}

	/**
	 * Getter de telefono
	 * @return telefono String
	 */
	@Column(name="TELEFONO")
	public String getTelefono() {
		return telefono;
	}

	/**
	 * Setter de telefono
	 * @param telefono String
	 */
	public void setTelefono(String telefono) {
		this.telefono = telefono;
	}

	/**
	 * Getter de email
	 * @return email String
	 */
	@Email
	@Column(name="EMAIL")
	public String getEmail() {
		return email;
	}

	/**
	 * Setter de email
	 * @param email String
	 */
	public void setEmail(String email) {
		this.email = email;
	}

	/**
	 * Getter de numCriador
	 * @return numCriador String
	 */
	@Column(name="NUM_JUEZ")
	public String getNumJuez() {
		return numJuez;
	}

	/**
	 * Setter de numCriador
	 * @param numCriador String
	 */
	public void setNumJuez(String numCriador) {
		this.numJuez = numCriador;
	}

	/**
	 * Getter de usuario
	 * @return usuario String
	 */
	@OneToOne(fetch = FetchType.LAZY, mappedBy ="juez")
	public Usuario getUsuario() {
		return usuario;
	}

	/**
	 * Setter de usuario
	 * @param usuario String
	 */
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	/**
	 * Getter de dni
	 * @return dni String
	 */
	@Column(name="DNI")
	public String getDni() {
		return dni;
	}

	/**
	 * Setter de dni
	 * @param dni String
	 */
	public void setDni(String dni) {
		this.dni = dni;
	}

	/**
	 * @return the juecesConcurso
	 */
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "juez")
	public Set<JuezConcurso> getJuecesConcurso() {
		return juecesConcurso;
	}

	/**
	 * @param juecesConcurso the juecesConcurso to set
	 */
	public void setJuecesConcurso(Set<JuezConcurso> juecesConcurso) {
		this.juecesConcurso = juecesConcurso;
	}

	@Override
	public boolean equals(Object obj) {
	if(obj instanceof Juez){
		Juez juez = (Juez) obj;
		if(juez.getIdJuez() == this.getIdJuez()){
			return true;
		}
	}
	return false;
}
	
	@Override
	public int hashCode() {
		return super.hashCode();
	}

}
